<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!--导入属性配置 -->
    <#--<properties resource="config/mybatisGenerator/generatorJdbc.properties"></properties>-->

    <!--指定特定数据库的jdbc驱动jar包的位置 -->
    <classPathEntry location="${db.driverLocation}"/>

    <context id="default" targetRuntime="MyBatis3">


        <property name="mergeable" value="true"></property>

        <!-- 自动生成toString方法 -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"></plugin>
        <!-- 自动生成equals方法和hashcode方法 -->
        <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"></plugin>

        <!-- optional，旨在创建class时，对注释进行控制,因而一般情况下我们都会屏蔽注释信息-->
        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
            <property name="suppressDate" value="true"/>
        </commentGenerator>

        <!--jdbc的数据库连接 -->
        <jdbcConnection
                driverClass="${db.driverClassName}"
                connectionURL="${db.connectionURL}"
                userId="${db.userName}"
                password="${db.password}">
        </jdbcConnection>

        <!-- 非必需，类型处理器，在数据库类型和java类型之间的转换控制-->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="true"/>
        </javaTypeResolver>

        <!-- Model模型生成器,用来生成含有主键key的类，记录类 以及查询Example类
            targetPackage     指定生成的model生成所在的包名
            targetProject     指定在该项目下所在的路径
        -->
        <javaModelGenerator targetPackage="${automaticEntityPackageName}" targetProject="${entityTargetProject}">
            <!-- 是否构造方法 -->
            <property name="constructorBased" value="false"/>

            <!-- 是否允许子包，即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="true"/>

            <!-- 建立的Model对象是否 不可改变  即生成的Model对象不会有 setter方法，只有构造方法 -->
            <property name="immutable" value="false"/>

            <!-- 添加父类 -->
            <property name="rootClass" value="${entityRootClass}"/>

            <!-- 是否对类CHAR类型的列的数据进行trim操作 -->
            <property name="trimStrings" value="true"/>

        </javaModelGenerator>

        <!--Mapper映射文件(xml)生成所在的目录 -->
        <sqlMapGenerator targetPackage="${automaticMapperPackageName}" targetProject="${mapperTargetProject}">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>





        <!-- 生成接口 的代码
                type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象
                type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象
                type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口
        -->
        <javaClientGenerator targetPackage="${automaticDaoPackageName}" targetProject="${daoTargetProject}"
                             type="XMLMAPPER">
            <property name="enableSubPackages" value=""/>
            <!--
                    定义Maper.java 源代码中的ByExample() 方法的可视性，可选的值有：
                    public;
                    private;
                    protected;
                    default
                    注意：如果 targetRuntime="MyBatis3",此参数被忽略
             -->
            <property name="exampleMethodVisibility" value=""/>
            <!--方法名计数器 Important note: this property is ignored if the target runtime is MyBatis3.-->
            <property name="methodNameCalculator" value=""/>

            <!--为生成的接口添加父接口-->
            <property name="rootInterface" value=""/>

        </javaClientGenerator>

        <!--DeviceUser-->
    <#list tableList as item>
        <table tableName="${item.tableName}"
               domainObjectName="${automaticEntityPrefix+item.domainObjectName}"
               enableCountByExample="true"
               enableUpdateByExample="true"
               enableDeleteByExample="true"
               enableSelectByExample="true"
               selectByExampleQueryId="true">
        </table>
    </#list>


    </context>
</generatorConfiguration>